package com.qdlc.p2p.biz.service;

import java.util.List;

import com.qdlc.p2p.biz.processor.event.RedEnvelopeValueEvent;
import com.qdlc.p2p.common.constant.RedEnvelopeFrom;
import com.qdlc.p2p.common.constant.RedEnvelopeType;
import com.qdlc.p2p.common.core.ReturnResult;
import com.qdlc.p2p.common.core.queue.ValueEvent;
import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.*;
import com.qdlc.p2p.dal.model.RedEnvelopeModel;

/**
 * 红包方案Service接口
 *
 * @author ylx
 * @version 2.0
 * @date 2015年4月22日 下午3:08:27
 */
public interface RedEnvelopeService {
    /**
     * 保存红包方案
     *
     * @param model RedEnvelopeModel
     * @param list  RedEnvelopeAttached
     * @return RedEnvelope
     */
    RedEnvelope save(RedEnvelopeModel model, List<RedEnvelopeAttached> list);

    /**
     * 查询红包方案
     *
     * @param id 主键ID
     * @return RedEnvelope
     */
    RedEnvelope getRedEnvelopeById(long id);

    /**
     * 查询所有已开启的红包方案
     *
     * @return List<RedEnvelope>
     */
    List<RedEnvelope> findUsableRedEnvelope();

    /**
     * 查询所有已开启的固定金额红包方案
     *
     * @return List<RedEnvelope>
     */
    List<RedEnvelope> findUsableRedEnvelopeForFixed();

    /**
     * 分页查询红包方案
     *
     * @param model RedEnvelopeModel
     * @return PageDataList<RedEnvelopeModel>
     */
    PageDataList<RedEnvelopeModel> list(RedEnvelopeModel model);

    /**
     * 修改红包方案
     *
     * @param model RedEnvelopeModel
     * @param list  RedEnvelopeAttached
     * @return RedEnvelope
     */
    RedEnvelope update(RedEnvelopeModel model, List<RedEnvelopeAttached> list);

    /**
     * 删除红包方案(伪删除），将红包方案是否删除状态置为删除
     *
     * @param id 红包方案主键ID
     */
    void delete(long id);

    /**
     * 修改红包状态
     *
     * @param redEnvelopeIds 红包IDS
     * @param aftStatus      修改后状态
     * @param preStatus      前状态
     * @return
     */
    int changeStatus(long[] redEnvelopeIds, int preStatus, int aftStatus);
}
